package br.usp.ime.protoc.pessoa;

import java.util.HashSet;
import java.util.Iterator;

import com.google.gwt.user.client.rpc.IsSerializable;

import br.usp.ime.protoc.fujaba.FEmptyIterator;

public class Endereco implements IsSerializable
{
   private String bairro;

   public String getBairro()
   {
      return this.bairro;
   }

   public void setBairro(String value)
   {
      if (this.bairro != value)
      {
         
         this.bairro = value;
         
      }
   }

   private String cep;

   public String getCep()
   {
      return this.cep;
   }

   public void setCep(String value)
   {
      if (this.cep != value)
      {
         
         this.cep = value;
         
      }
   }

   private String cidade;

   public String getCidade()
   {
      return this.cidade;
   }

   public void setCidade(String value)
   {
      if (this.cidade != value)
      {
         
         this.cidade = value;
         
      }
   }

   private String complemento;

   public String getComplemento()
   {
      return this.complemento;
   }

   public void setComplemento(String value)
   {
      if (this.complemento != value)
      {
         
         this.complemento = value;
         
      }
   }

   private String logradouro;

   public String getLogradouro()
   {
      return this.logradouro;
   }

   public void setLogradouro(String value)
   {
      if (this.logradouro != value)
      {
         
         this.logradouro = value;
         
      }
   }

   private int numero;

   public int getNumero()
   {
      return this.numero;
   }

   public void setNumero(int value)
   {
      if (this.numero != value)
      {
         
         this.numero = value;
         
      }
   }

   private String uf;

   public String getUf()
   {
      return this.uf;
   }

   public void setUf(String value)
   {
      if (this.uf != value)
      {
         
         this.uf = value;
         
      }
   }

   /**
    * <pre>
    *           1      has      1..* 
    * Endereco ---------------------- Pessoa
    *           endereco      pessoa 
    * </pre>
    */
   private HashSet pessoa;

   public boolean addToPessoa(Pessoa value)
   {
      boolean changed = false;
      if (value != null)
      {
         if (this.pessoa == null)
         {
            this.pessoa = new HashSet (); // or FTreeSet () or FLinkedList ()
         }
         
         changed = this.pessoa.add (value);
         if (changed)
         {
            value.setEndereco (this);
         }
         
      }
      return changed;
   }

   public boolean hasInPessoa(Pessoa value)
   {
      return ((this.pessoa != null) &&
              (value != null) &&
              this.pessoa.contains (value));
   }

   public Iterator iteratorOfPessoa()
   {
      return ((this.pessoa == null)
              ? FEmptyIterator.get ()
              : this.pessoa.iterator ());
   }

   public void removeAllFromPessoa()
   {
      Pessoa tmpValue;
      Iterator iter = this.iteratorOfPessoa ();
      while (iter.hasNext ())
      {
         tmpValue = (Pessoa) iter.next ();
         this.removeFromPessoa (tmpValue);
      }
   }

   public boolean removeFromPessoa(Pessoa value)
   {
      boolean changed = false;
      if ((this.pessoa != null) && (value != null))
      {
         
         changed = this.pessoa.remove (value);
         if (changed)
         {
            value.setEndereco (null);
         }
         
      }
      return changed;
   }

   public int sizeOfPessoa()
   {
      return ((this.pessoa == null)
              ? 0
              : this.pessoa.size ());
   }

   public void removeYou()
   {
      removeAllFromPessoa ();
   }

}
